package com.cykj.page03;

import java.io.FileInputStream; // 导入 FileInputStream 类，用于读取文件内容


/**
 * @BelongsProject: MyTomcat
 * @BelongsPackage: com.cykj.page03
 * @Author: WWJ
 * @CreateTime: 2025-06-23 22:14
 * @Description: 处理静态资源（如 HTML、图片等）请求的类
 * @Version: 1.0
 */
public class StaticResourceHandler {

    private String filePath;   // 文件路径，用于指定静态资源的存放位置
    private byte[] fileBytes;  // 用于存储文件的字节数据
    private String media;      // 文件的媒体类型（如 text/html, image/png 等）

    /**
     * 构造方法，接受文件路径并初始化文件字节数据和媒体类型
     * @param filePath 静态资源的文件路径
     */
    public StaticResourceHandler(String filePath) {
        this.filePath = filePath;   // 设置文件路径
        getFileByte();              // 获取文件的字节数据
        getFileMedia();             // 获取文件的媒体类型
    }

    /**
     * 获取文件的字节数据
     * 使用 FileInputStream 读取文件并将其内容存储到 byte[] 数组中
     */
    private void getFileByte() {
        try {
            // 创建 FileInputStream 对象，读取指定路径的文件
            FileInputStream fis = new FileInputStream(filePath);

            // 根据文件的大小初始化 byte 数组
            fileBytes = new byte[fis.available()];

            // 读取文件内容并存储到 fileBytes 数组
            fis.read(fileBytes);
        } catch (Exception e) {
            // 如果发生异常，抛出 RuntimeException
            throw new RuntimeException(e);
        }
    }

    /**
     * 获取文件的媒体类型（MIME类型）
     * 依据文件的后缀名（如 .html, .png）来判断文件的媒体类型
     */
    private void getFileMedia() {
        // 按文件后缀名分割路径
        String[] split = filePath.split("\\.");

        // 获取文件的后缀名（例如：html, png, jpg）
        String suffix = split[split.length - 1];

        // 根据文件后缀设置媒体类型
        if (suffix.equals("html")) {
            media = "text/html";    // 如果是 HTML 文件，设置媒体类型为 text/html
        } else if (suffix.equals("png")) {
            media = "image/png";    // 如果是 PNG 图片，设置媒体类型为 image/png
        } else if (suffix.equals("jpg")) {
            media = "image/jpeg";   // 如果是 JPG 图片，设置媒体类型为 image/jpeg
        }
    }

    // Getter 方法，获取文件的字节数据
    public byte[] getFileBytes() {
        return fileBytes;
    }

    // Getter 方法，获取文件的路径
    public String getFilePath() {
        return filePath;
    }

    // Getter 方法，获取文件的媒体类型
    public String getMedia() {
        return media;
    }
}
